آموزش الگوریتم و فلوچارت 3
دانش برنامه نویسی و علم كامپيوتر

ارتباط منطقی بین داده ها و مجهولات نیز رابطه ای است که توسط آن می توان از داده های مساله به مجهولات دست یافت برای دستیابی به این رابطه می توان از قوانین و روشهای ریاضی استفاده کرد. حال به چند مثال  می پردازیم:
مثال :
فرض کنید می خواهیم میانگین دو عدد 30 و 40 را محاسبه کنیم.
1- داده ها (ورودیها): دو عدد 30 و 40
2- مجهولات (خروجی): میانگین دو عدد 30 و 40
3- رابطه منطقی: روش محاسبه میانگین (مجموع اعداد تقسیم بر تعداد آنها)

مثال :
می خواهیم با داشتن قاعده و ارتفاع مثلث، مساحت آن را محاسبه کنیم.
1- داده ها (ورودی): قاعده و ارتفاع
2- مجهولات (خروجی): مساحت مثلث
3- رابطه منطقی: روش محاسبه مساحت مثلث (ارتفاع *قاعده*1/2)  
اغلب مسایل دارای راه حلهای گوناگونی می باشند. یافتن بهترین راه حل به ابتکار، تمرین و از همه مهم تر تجربه بستگی دارد.
در این قسمت با مفاهیم روشهای منطقی و الگوریتمی آشنا می شویم:


مفهوم الگوریتم
به مجموعه دستورالعملهایی گفته می شود که مراحل حل یک مساله و یا مراحل مختلف انجام کاری را با یک زبان واضح، روشن و بدون ابهام و پیچیدگی با جزییات کافی بیان کرده و در آن شروع و پایان عملیات و همچنین ، ترتیب اجرای دستورالعملها، کاملا مشخص شده باشد.
الگوریتم ها به دو صورت می توانند اجرا شوند: توسط انسان که در آن صورت، مجری الگوریتم انسان خواهد بود و یا توسط ماشین اجرا شوند که مجری الگوریتم کامپیوتر خواهد بود.
گاهی اوقات برای کسب اطمینان از عملکرد صحیح الگوریتم، بهتر است الگوریتم را به صورت دستی اجرا کنیم یعنی خود، مجری الگوریتم باشیم.

کاربرد الگوریتم 
همه ما در طی روز برای انجام کارهای روزمره، از روش الگوریتمی و یا منطقی استفاده می کنیم. مانندتعویض چرخ پنچر شده اتومبیل، تهیه غذا و غیره. در واقع برای انجام هریک از کارهای ذکر شده، تعدادی دستورالعمل را باید به ترتیب اجرا کنیم تا به نتیجه مطلوب برسیم. این شیوه ، همان شیوه الگوریتمی است.کاربردهای الگوریتم را در قالب مثال بهتر میتوانید درک کنید.

مثال: 
فرض کنید کتابی داریم و می خواهیم آن را بخوانیم، برای مطالعه کتاب از ابتدا تا انتها باید مراحل زیر را اجرا کنیم:
1- شروع
2- کتاب را باز می کنیم.
3- از خط اول، شروع به خواندن می کنیم.
4- بررسی می کنیم که آیا تا انتهای صفحه خوانده شده است یا خیر؟
5- اگر به انتهای صفحه رسیده باشیم صفحه دوم را باز کرده و می خوانیم.
6- اگر به انتهای صفحه نرسیده باشیم خواندن را ادامه می دهیم.
7- بررسی می کنیم که آیا تا انتهای کتاب خوانده شده است یا خیر؟
8- اگر تا انتهای کتاب خوانده شده باشد خواندن پایان می یابد در غیر این صورت به مرحله 3 می رویم.
9- پایان

اجزای اصلی الگوریتم
هر مساله راه حل و الگوریتم خاص خود دارد. حتی گاهی میتوانید برای حل یک مساله روشهای گوناگونی را ارایه دهید. با این وجود تمام الگوریتم ها از اجزای اصلی و مشترکی تشکیل می شوند که به شرح آنها می پردازیم:

نقطه شروع

منظور از نقطه شروع الگوریتم این است که حل مساله از کجا آغاز شود.  این مرحله با کلمه "شروع" نشان داده میشود.

نقطه پایان

نقطه پایان الگوریتم، جایی است که مراحل مساله پایان می پذیرد. در هر حال الگوریتم باید در یک نقطه خاتمه یابد. این مرحله با کلمه "پایان" نشان داده می شود.

نکته: هر الگوریتم دارای یک نقطه شروع و حداقل یک نقطه پایان است. 

دستورالعملها یا جملات اجرایی
بعد از مشخص شدن نقطه الگوریتم، برای حل مسئله باید مراحل گوناگونی اجرا شوند. این مراحل در قالب یکسری دستورالعمل بیان می شوند. دستورالعملها فرمانهایی هستند که باید به ترتیب معینی اجرا شوند و در نهایت منجر به حل مسئله گردند. به دستورالعملها، جملات اجرایی می گویند.
جملات اجرایی را به سه صورت میتوان بیان کرد:

  1. به صورت جملات معمولی و محاوره ای
  2. به صورت گزاره ها و روابط ریاضی
  3. با استفاده از اشکال هندسی استاندارد


اکنون به الگوریتمی که با استفاده از جملات معمولی نوشته شده توجه کنید.

متغیر
به خانه ای از حافظه که داده ها و اطلاعات ورودی و خروجی را در خود نگه می دارد متغیر می گویند. توجه کنید که مقدار متغیر در طول اجرای الگوریتم تغییر می کند.

مثال :
الگوریتم محاسبه مجموع دو عدد60 و 70 :

  1. شروع
  2. عدد 60 را در خانه A قرار بده.
  3. عدد 70 را در خانه B قرار بده.
  4. محتویات خانه های A و B را با هم جمع کن و حاصل را در خانه C قرار بده.
  5. محتویات خانه C را به عنوان نتیجه حاصل جمع، چاپ کن.
  6. پایان.


با توجه به مثال فوق، بیان دستورالعملها در قالب جملات نوشتاری طولانی است و فهم الگوریتم را مشکل می کند؛ به همین دلیل بهتر است در صورت امکان از شکل جملات ریاضی به جای جملات محاوره ای استفاده شود. حال الگوریتم زیر را در قالب جملات ریاضی بیان می کنیم.

  1. شروع
  2. 60 = A  
  3. 70 = B
  4. SUM = A+ B
  5. محتویات SUM را چاپ کن.
  6. پایان


به مثال دیگری توجه کنید.

مثال:
الگوریتمی بنویسید که میانگین سه عدد 2، 3 و 5 را محاسبه و چاپ نماید.

شکل معمولی

  1. شروع
  2. عدد 2 را در خانه A قرار بده.
  3. عدد 3 را در خانه B قرار بده.
  4. عدد 5 را در خانه C قرار بده.
  5. محتویات خانه های B، A و C را با هم جمع کن و حاصل را در خانه SUM قرار بده.
  6. محتویات خانه SUM را بر 3 تقسیم کن و حاصل را در خانه AVE قرار بده.
  7. محتویات AVE را به عنوان خروجی چاپ کن.
  8. پایان


نکته: همانطور که در الگوریتم فوق مشاهده میکنید، اگر برای بیان الگوریتم، از جملات فارسی استفاده کنید، الگوریتم صورت جملات طولانی به خود می گیرد که دنبال کردن حل مسئله را مشکل می کند. برای جلوگیری از بروز این مشکل، از متغیرها استفاده میکنیم.

شکل ریاضی

  1. شروع
  2. 2 = A
  3. 3 = B
  4. 5 = C
  5. SUM = C+B+A
  6. AVE = SUM / 3
  7. محتویات AVE را چاپ کن.
  8. پایان


نکته:

همانطور که می بینید در بعضی از دستورالعملها از علامت (=) استفاده شده که به معنی جایگزینی می باشد.

برای مثال: 

برای ذخیره اعداد 2، 3 و 5 در محلهایی از حافظه علامت (=) را بکار می بریم. در حقیقت مقادیر اولیه را در محلهایی از حافظه ذخیره می کنیم. این کار را نه تنها برای ورودیها، بلکه برای نتایج حاصل از بعضی دستوالعملها نیز باید انجام داد. برای درک بهتر به ذکر چند نمونه می پردازیم:

  1. 3 = A : به این مفهوم است که عدد 3 در خانه ای از حافظه به نام A قرار گیرد.
  2. 5 - (3 * 2)= B: یعنی نتیجه 5 - (3 * 2) در خانه ای به نام B نوشته شود.
  3. 1 +  A= B : به معنی این است که به محتویات خانه B، یک واحد اضافه شده و حاصل در خانه ای به نام A ذخیره گردد. 
  4. 1 - A= A:  به این مفهوم است که از محتویات خانه A، یک واحد کم شده و حاصل در همان خانه ذخیره گردد.


حالا با کاربرد علامت (=) آشنا شدید بیان الگوریتم به فرم ریاضی آسان تر میشود. 

انواع جملات

جملات در الگوریتم نویسی به چهار دسته بیان میشود:

  1. جملات شرطی
  2. جملات محاسباتی
  3. جملات توضیحی
  4. جملات مربوط به ورودی و خروجی


 جملات شرطی
گاهی اوقات تصمیم گیریهای خاص در شرایط ویژه ای اتخاذ می شود این شرایط را با جملات شرطی میتوان بیان کرد. جملات شرطی دو نوع می باشند:
شرطی نوع اول: شکل کلی این گونه جملات به صورت زیر می باشد.

IF " شرط " THEN " یک یا چند دستور را انجام بده "
اگر "شرط برقرار است است" سپس "یک یا چند دستور را انجام بده".

در این گونه جملات، اگر قسمت شرط درست باشد دستورات اجرا شده و کنترل اجرای الگوریتم به مرحله بعد منتقل میشود ولی اگر شرط نادرست باشد بدون اجرای دستورات کنترل الگوریتم دستور بعدی را اجرا خواهد کرد.
مثال:
اگوریتمی بنویسید که اعداد زوج دو رقمی را چاپ کند:

توجه: با توجه به اینکه کوچکترین عدد زوج دو رقمی عدد 10 می باشد و اعداد زوج به اندازه 2 واحد از هم فاصله دارند .

  1. شروع
  2. 10= I
  3. I را چاپ کن.
  4. 2+ I=I
  5. اگر 98 =>I است، سپس به مرحله 3 برو. (به این مرحله جمله شرطی میگویند) شرطی نوع اول
  6. پایان


در مثال فوق چون مقدار نهایی I برابر 100 می شود (98 < 100 است) شرط در مرحله 5 نقض شده و کنترل اجرای الگوریتم به مرحله بعدی میرود و الگوریتم پایان می پذیرد.

 شرطی نوع دوم: شکل کلی این جملات به صورت زیر می باشد:

IF "شرط " THEN " یک یا چند دستورالعمل را انجام بده " ELSE "یک یا چند دستورالعمل را انجام بده"
اگر "شرط برقرار است" سپس " یک یا چند دستورالعمل را انجام بده " در غیر اینصورت " یک یا چند دستورالعمل را انجام بده".

نکته: هرگاه بخواهیم دو دستورالعمل را در یک مرحله بنویسیم، بین دو دستورالعمل " و" می گذاریم.
مثال:
الگوریتمی بنویسید که اعداد زوج 1000 تا 2000 را تولید کرده، مجموع آنها را محاسبه نماید.

  1. شروع
  2. 1000= I و 0= S
  3. I را چاپ کن و S=S+I
  4. 2+I=I
  5. اگر 2000 => I است، سپس برو به مرحله 3 در غیر این صورت مقدار S را چاپ کن.(دستور شرطی نوع دوم می باشد)
  6. پایان


یادآوری: اگر بخواهیم حاصل جمعی را محاسبه کنیم، یک متغیر را در نظر می گیریم به نام (S) که مقدار آن صفر باشد، سپس تک تک جملاتی که قرار است با هم جمع کنیم را تولید کرده و با متغیر در نظر گرفته شده (S) جمع و نتیجه را در همان متغیر (S) دخیره میکنیم.

شکل کلی جمله شرطی نوع اول: اگر <شرط> بود، پس <دستورالعمل>
شکل کلی جمله شرطی نوع دوم: اگر <شرط> بود، پس <دستورالعمل> وگرنه <دستورالعمل>

جملات محاسباتی
جملات محاسباتی برای بیان عملیاتی که به محاسبات ریاضی نیاز دارند به کار می روند. به این نمونه ها توجه کنید:

  1.  5 + (3*2) = A
  2. 5 + B =  2 *  A
  3. C2= b2+c2



همانطور  که ملاحظه میکنید جملات محاسباتی ترکیبی از متغیرها، اعداد یا ثابتها و عملگرها می باشند.

ثابتها: منظور از ثابتها اعداد یا خانه هایی از حافظه هستند که مقدار آنها در طول اجرای الگوریتم ثابت است.

عملگرها: به علامت هایی که یک عمل را نشان می دهند و روی یک یا چند عملوند(اعداد) عمل میکنند عملگر گویند.

مانند عملگر جمع، تفریق، ضرب، تقسیم و ... در عبارت  5 + (3*2) = A اعداد 2، 3 و 5 مقادیر ثابت، A متغیر و علامتهای جمع و ضرب عملگرهای ریاضی می باشند.

عبارت محاسباتی و تقدم عملگرها
عبارت محاسباتی ترکیبی از متغیرها، ثوابت و عملگرهاست. به عنوان مثال، به عبارت زیر توجه کنید:

  1. 7- (5+2)*6
  2. 9/ 6 *3 +4


برای اینکه حاصل این عبارت ها بدانیم باید مشخص شود کدام عملگر اول می باشد و عملگر دوم کدام است و همینطور عملگرسوم؟
تقدم عملگرها، ترتیب انجام عملیات را مشخص میکند. در چهار عمل اصلی تقدم ضرب و تقسیم یکسان است و تقدم جمع و تفریق هم یکسان است ولی تقدم ضرب و تقسیم از تقدم جمع و تفریق بیشتر است. این قانون با پرانتز، تغییر میکند، یعنی ابتدا عملگرهای درون پرانتز انجام میشوند و سپس سایر عملگرها عمل میکنند.
در عبارت 1، ابتدا عدد 5 با 2 (داخل پرانتز) با هم جمع می شوند و حاصل بدست آمده در عدد 6 ضرب میشود و نتیجه آن 42 است.سپس عملگر تفریق عمل میکند و حاصل این عبارت برابر با 35 خوهد شد.
در عبارت 2، تقدم ضرب و تقسیم یکسان است ولی بدلیل اینکه ضرب قبل از تقسیم آمده زودتر عمل میکند. بنابراین، ابتدا 3 در 6 ضرب میشود و حاصل آن که 18 است بر 9 تقسیم میشود و نتیجه آن ، که 2 است با 4  جمع شده، حاصل این عبارت برابر با 6 میشود. بنابراین اگر تقدم دو یا چند عملگر یکسان باشد، در یک عبارت محاسباتی، آن یکی که زودتر ظاهر شده، زودتر انجام میشود.

جملات توضیحی
گاهی برای افزایش وضوح مراحل اجرای الگوریتم از جملات توضیحی استفاده می شود.
مثال:
الگوریتم محاسبه تعداد اعداد زوج a تا b را با فرض a

  1. شروع
  2. 0=C ) C یک شمارنده است که تعداد عددهای زوج را شمارش میکند)
  3. 2 A=a mod (در این مرحله قسمت صحیح باقیمانده تقسیم a بر 2 در خانه A قرار می گیرد.)
  4. اگر 0 = A است به مرحله 6 برو.(زوج)
  5. 1+ a = a و به مرحله 7 برو.(فرد)
  6. 2+ a =a (اعداد زوج) و 1+ C= C (اعداد فرد)
  7. اگر a
  8. مقدار C را چاپ کن.
  9. پایان


در مراحل 2 و 3 به کمک جملات توضیحی وضوح کار بیشتر شده است.

جملات مربوط به ورودی و خروجی 
جملات ورودی در یک الگوریتم، جملاتی هستند که توسط آنها میتوانیم داده ها را وارد کامپیوتر کرده و معمولا با کلمات «بخوان» و «بگیر » مشخص می شوند. جملات خروجی هم جملاتی هستند که توسط آنها میتوانیم خروجیها و یا نتایج را از کامپیوتر دریافت کرده و معمولا با کلمات «بنویس» و «نمایش بده» مشخص می شوند.
مثال:

میخواهیم با وارد کردن دو عدد a و b حاصل ضرب آنها را بدست آوریم.

  1. شروع
  2. a و b را بگیر
  3. c = a * b
  4. c را چاپ کن
  5. پایان


در مثال فوق مرحله 2 اطلاعات ورودی دریافت و در مرحله 4 اطلاعات خروجی نشان میدهد

ایجاد حلقه های تکرار در یک الگوریتم
گاهی اوقات برای حل مسائل باید یک یا چند مرحله را تکرارکرد. به مراحلی از الگوریتم که اجرای آنها چندین بار تکرار می شود، حلقه (Loop) یا حلقه تکرار می گویند.

به طور کلی حلقه های تکرار از اجزای زیر تشکیل شده اند:

  1. شمارنده حلقه: یک متغیر کمکی که پیش از شروع حلقه به آن مقدار اولیه داده میشود و از طریق آن میتوان تعداد دفعات تکرار حلقه را نشان داد.
  2. گام افزایش: مقداری که پس از هر بار اجرای مراحل حلقه به شمارنده حلقه اضافه میشود.
  3. شرط پایانی: مقدار یا متغیری که بعد از اجرای دستورات حلقه با شمارنده حلقه مقایسه میشود و پایان اجرای دستورات حلقه را مشخص میکند.
  4. بدنه حلقه : دستورالعملها و جملاتی که عملیات اصلی حلقه را تشکیل میدهند.



مثال:
الگوریتمی بنویسید که 100 عدد دلخواه را به ترتیب از ورودی دریافت کرده و چاپ نماید.

  1. شروع
  2. 0 = I (شمارنده)
  3. a را بخوان
  4. a را چاپ کن
  5. 1+I = I (گام افزایش)
  6. اگر 100>I است، سپس برو به مرحله 3 (شرط پایانی)
  7. پایان


توضیح : متغیرI نقش شمارنده حلقه را دارد که در ابتدا مقدار اولیه آن 0 است و هر بار، به مقدار آن یک واحد اضافه شده(گام افزایش) سپس با عدد 100 مقایسه میشود(شرط پایانی) . زمانی از حلقه خارج میشویم که مقدار شمارنده I به عدد 100 برسد در این صورت 100 عدد از ورودی خوانده شده است.
در یک عبارت کلی:
گام افزایش + مقدار نهایی شمارنده در داخل حلقه = مقدار نهایی شمارنده

حل مثالها

مثال(1)
الگوریتمی بنویسید که چهار عدد دلخواه را از ورودی خوانده و میانگین آنها را محاسبه و چاپ نماید.

  1. شروع
  2. A+B+C+D را بخوان
  3. SUM= A+B+C+D  (مجموع اعداد در این مرحله محاسبه میشود)
  4. AVE = SUM / 4  (میانگین اعداد در این مرحله محاسبه میشود)
  5. محتوای AVE را چاپ کن
  6. پایان


مثال (2)
الگوریتمی بنویسید که عدد X را به عنوان ورودی دریافت کرده است، اگر X مثبت باشد آن را در 2 ضرب کرده و چاپ نماید؛ در غیر اینصورت قرینه عدد را چاپ نماید.

  1. شروع
  2. X را بخوان
  3. اگر 0< X است، سپس 2 * X=X و به مرحله 5 برو . (شرط مثبت بودن X در این مرحله بررسی میشود)
  4. X = -X
  5. X را چاپ کن
  6. پایان 


توضیح: در این مثال میتوان دو دستورالعمل را در یک مرحله به کار برد. مانند دستور شماره( 3) که اولا مقدار 2 * X  را محاسبه کند و در X قرار دهد ثانیا به مرحله 5 برود.

مثال (3)
الگوریتمی بنویسید که جواب معادله درجه اول یک مجهولی ax + b = c با شرط 0≠ a را محاسبه و چاپ نماید.

  1. شروع
  2. a را بخوان
  3. اگر 0= a  است، سپس به مرحله 2 برو
  4. b و c را بخوان (در غیر این صورت)
  5.     (جواب معادله درجه یک در این مرحله به دست آمده و در X ذخیره میشود)
  6. X را چاپ کن
  7. پایان



 توضیح: در ابتدا باید شرط  0≠ aبررسی شود، به عبارتی اگر مقدار a مخالف 0 بود، به عنوان ورودی دریافت کند

مثال(4)
الگوریتمی بنویسید که دو مقدار X و Y را به عنوان ورودی دریافت کرده است، اگر X>Y باشد، مجموع X و Y، اگر X
توضیح: برای حل این مساله بهتر است X-Y را محاسبه کرده و داخل متغیر A قرار دهیم، سپس برحسب مقدار متغیر A تصمیم گیری کنیم.

  1. شروع
  2. X و Y را بخوان
  3. A = X-Y
  4. اگر 0
  5. اگر 0>A است، سپس A = X-Y و به مرحله 7 برو. (کوچک تر بودن X از Y در این مرحله بررسی میشود)
  6. X را چاپ کن و به مرحله 8 برو.
  7. A را چاپ کن
  8. پایان


مثال(5)
الگوریتمی بنویسید که سه عدد A و B و C را دریافت کرده و بزرگترین آنها را یافته و چاپ نماید.

  1. شروع
  2. A و B و C را بگیر
  3. A را در متغیر MAX قرار بده
  4. اگر B> MAX است،سپس B را در MAX قرار بده
  5. اگر C> MAX است،سپس C را در MAX قرار بده
  6. مقدار  را MAX چاپ کن
  7. پایان


مثال (6)
الگوریتمی بنویسید که X را دریافت کرده، قدر مطلق آن را محاسبه و چاپ نماید.
تعریف قدر مطلق: دارای این خاصیت است که هر عددی دورن آن قرار دهیم خروجی مثبت است. بنابراین میتوان قدر مطلق را بصورت زیر تعریف کرد

    
یعنی اگر عدد درون قدر مطلق عددی مثبت بود خود آن عدد و اگر عدد درون قدر مطلق عددی منفی بود قرینه اش از قدر مطلق بیرون خواهد آمد.
منظور از قرینه یک عدد اینست که اگر منفی باشد، مثبت میشود و اگر مثبت باشد، منفی می شود.

  1. شروع
  2. x را بخوان
  3. اگر 0>X است، سپس X= -X
  4. محتویات X را چاپ کن
  5. پایان


مثال (7)
الگوریتمی بنویسید که 30 عدد دلخواه را دریافت کرده و چاپ نماید و در نهایت میانگین آنها را نیز چاپ کند.

  1. شروع
  2. 1 = I و 0 = S                                                    (شمارنده I و  S  مجموع اعداد است)
  3. a را بگیر.
  4. a را چاپ کن.
  5. S = S + a                                                         (مجموع اعداد در این مرحله محاسبه می شود.)
  6. I = I +1                                                           (گام افزایش به شمارنده حلقه در این مرحله افزوده می شود.)
  7. اگر I <= 30 است، سپس برو به مرحله 3. (شرط حلقه در این مرحله بررسی می شود، شمارنده حلقه با مقدار پایانی مقایسه می گردد.)
  8. M = S / I                                                         (میانگین 30 عدد محاسبه میشود، M به عنوان میانگین در نظر گرفته شده)
  9. M را چاپ کن.
  10. پایان



مثال (8)
الگوریتمی بنویسید که اعدادی را از ورودی دریافت کرده و آنهایی را که به رقم 3 ختم می شوند شمارش کرده و حاصل را نمایش دهد (شرط خاتمه، ورود عدد صفر از ورودی باشد )

  1. شروع
  2. 0 = I
  3. N را بگیر
  4. اگر N =0  است، سپس به مرحله 8 برو.
  5. P = N mod 10
  6. اگر P = 3 است، سپس I =I + 1 (تعداد اعداد که به 3 ختم می شوند)
  7. به مرحله 3 برو.         
  8. I را چاپ کن
  9. پایان


مثال (9)
الگوریتمی بنویسید که عدد طبیعی N را دریافت کرده و معین کند عدد تام است یا خیر؟

نکته:
عدد طبیعی N را تام یا کامل می گوییم هرگاه مجموع مقسوم علیه های کوچکتر از عدد N با خود عدد N برابر شود مانند:
    مجموعه مقسوم علیه های کوچکتر از 6                   N = 6
 در مثال فوق 6= 3+2+1 است که با خود عدد 6 برابر است بنابراین عدد 6 یک عدد تام است.
(توجه کنید جهت پیدا کردن مقسوم علیه، همیشه باید شمارنده را با نصف عدد مقایسه کنیم.)

  1. شروع
  2. N را بگیر
  3. S = 0 , I = 1                          (شمارنده در این مرحله مقدار دهی می شود)
  4. R = N mod I                           (عدد تام R و mod باقیمانده تقسیم است)
  5. اگر R = 0، سپس S= S+I
  6. I = I+1
  7. اگر I<= N/2 است، سپس برو به مرحله 5
  8. اگر S =N است، سپس بنویس "عدد N تام است" و برو به مرحله 11
  9. بنویس  "عدد N تام نیست".
  10. پایان


 
مثال (10)
الگوریتمی بنویسید که عدد طبیعی N را دریافت نموده و معین کند اول است یا خیر؟

نکته:
عدد اول عددی است که بجز یک و خودش هیچ مقسو م علیه دیگری نداشته باشد.مانند عدد 13 که فقط بر اعداد 1 و 13 بخشپذیر است؛ بنابراین هرگاه عددی بر یکی از اعداد بین یک و خودش بخشپذیر باشد دیگر اول نیست و اگر به تمامی آنها تقسیم شده و باقیمانده صفر نشود (یعنی فقط بر یک و خودش بخشپذیر باشد) اول است.

  1. شروع
  2. N را بگیر
  3. I = 2                                                   (به شمارنده حلقه در این مرحله مقدار اولیه داده میشود.)
  4. R = N mod I
  5. اگر R = 0  است، سپس بنویس N " اول نیست" و برو به مرحله 9 .    (در این مرحله بررسی میشود که عدد اول است یا نه)
  6. I = I +1                                                            (گام افزایش در این مرحله به شمارنده حلقه افزوده میشود.)
  7. اگر I < N است، سپس برو به مرحله 4.    
  8. بنویس "N اول است".
  9. پایان


 مثال (11)

 اداره ای دارای 500 کارمند می باشد و می خواهد حقوق کارمندان خود را افزایش دهد. الگوریتمی بنویسید که به حقوق کارمندانی که کمتر یا مساوی با 25000 تومان می باشد 5% اضافه شود و به حقوق کسانی که بین 25000 و 35000 تومان است 7% و به حقوق بیش از 35000 تومان 10% اضافه شود و حقوق اولیه، مقدار اضافه حقوق و مقدار اضافه حقوق جدید را برای هر کارمند محاسبه و چاپ نماید.

توجه

در این مثال N به عنوان نام کارمند، H حقوق قدیم، E اضافه حقوق و S حقوق جدید در نظر گرفته شده است.

  1. شروع
  2. I = 1                          (مقدار اولیه در این مرحله به شمارنده حلقه داده میشود)
  3. N را بخوان                    (نام کارمند در این مرحله از ورودی دریافت میشود)
  4. H را بخوان                     (حقوق ناخالص کارمند در این مرحله دریافت میشود)
  5. اگر H<= 25000 است، سپس     و S = E + H و برو به مرحله 9.
  6. اگر H<= 35000 است، سپس     و S = E + H و برو به مرحله 9.
  7.    
  8. S = E + H
  9. مقدار N را بنویس.
  10. مقدار H را بنویس.
  11. مقدار E را بنویس.
  12. مقدار S را بنویس.
  13. I = I+1
  14. اگر I<= 500 است ، سپس برو به مرحله 3.
  15. پایان



مثال (12)
الگوریتمی بنویسید که عدد طبیعی N را دریافت نموده و فاکتوریل آن را محاسبه کند.

توجه

فاکتوریل N را با نماد ! N نشان می دهند و از رابطه زیر محاسبه می شود:

    

به عنوان مثال:

1 = !0          ،         1 = !1
720= 1* 2* 3* 4* 5* 6= !6

در این مثال برای محاسبه حاصل ضرب چند عدد متوالی ابتدا باید خانه ای با مقدار اولیه 1 در نظر گرفته سپس اعداد را یکی یکی تولید و در آن خانه ضرب کرد. در نظر داشته باشید که مقدار اولیه خانه باید 1 باشد اگر آن را 0 در نظر بگیرید به ازای هر بار عمل ضرب حاصل 0 خواهد شد

  1. شروع
  2. N را بگیر     (عددی که میخواهیم از آن فاکتوریل بگیریم)
  3. I = 1  
  4. P= 1
  5. P = P *I
  6. I = I+ 1
  7. اگر I <=N  است، سپس برو به مرحله 5
  8. P  را چاپ کن
  9. پایان


مثال (13)
الگوریتمی بنویسید که جواب های حقیقی معادله درجه دوم یک مجهولی  ax+ bx + c =0  را که در آن a ≠ 0  است محاسبه و چاپ نماید.
 
حل معادله درجه دوم یک مجهولی بدین صورت می باشد:

  1. اگر 0< ∆  باشد معادله دو ریشه حقیقی دارد که ریشه های آن از فرمول زیر محاسبه می شوند:
     


    

2.  اگر  0>∆ باشد معادله ریشه حقیقی ندارد:
3. اگر  0=∆ باشد معادله یک ریشه مضاعف دارد:                         

در الگوریتم زیر به جای ∆ از متغیر D استفاده شده و مقدار آن برابر است با D= b– 4* a * c . با توجه به توضیحات فوق الگوریتم مسئله بدین صورت می باشد:

  1. شروع
  2. a را بخوان
  3. اگر a = 0 است، سپس برو به مرحله 2
  4. c و  b را بخوان
  5. D= b– 4* a * c
  6. اگر D >0 است، سپس     و      ، چاپ کن  X1  و  X2  را و برو به مرحله 9
  7. اگر  0= ∆ است، سپس     ، مقدار X و عبارت " ریشه مضاعف دارد" را چاپ کن و برو به مرحله 9
  8. عبارت  " ریشه حقیقی ندارد" را چاپ کن
  9. پایان

 

بخش دوم
مقدمه
در بخش قبلی برای حل مسائل با روشهای الگوریتمی آشنا شدید. در این روش از جملات فارسی، عملگرها و ... استفاده میشود. نوشتن راه حل مسائل با جملات فارسی، نمادهای ریاضی و حروف انگلیسی برای مسائل پیچیده کار دشوار و سخت کننده ای است. بنابراین بهتر است در صورت امکان روش ساده تر و خلاصه تری پیدا کرد. این مشکل به زبان تصویری و استفاده از نمادهای تصویری استاندارد برطرف می گردد. به ویژه که ارائه راه حل مسائل با مولفه های تصویری به زبان خاصی وابسته نیست و حالت استاندارد و جهانی بیشتری دارد.

تعریف فلوچارت 

بیان تصویری الگوریتم به کمک مجموعه ای استاندارد از اشکال ساده را فلوچارت یا نمودار گردشی میگویند.
همانطور که در مبحث الگوریتم الگوریتم ملاحظه نمودید برای بیان مراحل حل مسائل از چند جمله استاندارد و کلی استفاده میشود. حال با دسته بندی این جملات و انتساب هر دستور به یک شکل میتوان الگوریتم را از حالت نوشتاری به حالت تصویری تبدیل کرد. در این قسمت با مفاهیم اساسی تبدیل الگوریتم به فلوچارت آشنا شده و توانایی ترسیم فلوچارت های مسائل گوناگون را پیدا خواهید کرد.

کاربرد فلوچارت

بطور کلی برای حل یک مسئله به کمک کامپیوتر اول مرحله نوشتن الگوریتم و دوم مرحله رسم فلوچارت می باشد. سپس میتوان برنامه کامپیوتری را از روی فلوچارت پیاده سازی نمود. رسم فلوچارت درک الگوریتم را آسانتر کرده و نوشتن برنامه را بسیار ساده تر میکند.
در واقع یکی از روشهای برقراری ارتباط منطقی، بین مراحل مختلف حل مسئله، فلوچارت است. فلوچارت، متشکل از اشکال قراردادی است و هر یک از این اشکال دارای مفهوم خاصی می باشند که با مشاهده فلوچارت توسط افراد مختلف، استنباطهای گوناگون صورت نمی گیرد.همچنین برای مسائل پیچیده و طولانی بهتر است از فلوچارت استفاده شود چرا که دنبال کردن مجموعه عملیات مورد نیاز برای حل یک مسئله آسان تر بوده و برنامه نویس از روی فلوچارت به راحتی میتواند برنامه را پیاده سازی کند. 

 اشکال موجود در فلوچارت یک برنامه

  1.  شکل (علامت) شروع و پایان          
  2. خطوط رابط (جهت های اصلی) یا علامت اتصال: خطوط رابط که به شکل یک پاره خط جهت دار نشان داده می شوند مراحل اصلی عملیات را به یکدیگر ارتباط می دهند و اگر در یک مرحله از عملیات قرار بگیرید، پس از اجرای آن مرحله، با دیدن این شکل باید مرحله بعدی را دنبال کنید. 


    

علامت ورودی و خروجی: برای نمایش عملیات مربوط به گرفتن مقادیر و داده ها به عنوان ورودی از شکل متوازی الاضلاع استفاده می شود. این شکل نشان دهنده ورود داده ها به کامپیوتر می باشد.

    

نکته:
در مورد متوازی الاضلاع در نظر داشته باشید که چندین فلش می تواند به آن وارد شود ولی فقط یک فلش از آن باید خارج شود.

برای دستور خروجی ، از علامت های دیگری استفاده میشود از شکل های زیر بر روی صفحه نمایش و خروجی بر روی صفحه کاغذ مورد استفاده قرار می گیرند:

                                                                    

برای مشاهده خروجی بر روی صفحه نمایش           برای مشاهده خروجی از طریق چاپگر روی صفحه کاغذ

علامت مقداردهی اولیه
گاهی لازم میشود در متغیری مقدار اولیه ای را جایگزین کنیم. همانطور که می دانید به چنین عملی عمل انتساب یا جایگزینی گفته میشود. برای مثال، X=3 به معنی انتساب عدد 3 به متغیر X است. برای نمایش عملیات انتساب یا جایگزینی از علامت مستطیل استفاده میشود.
در مورد این علامت  نیز میتوان چند فلش به آن وارد کرد ولی تنها یک فلش از آن خارج میشود.

    

علامت عملیات محاسباتی
از شکل مستطیل برای کلیه عملیات محاسباتی استفاده میشود. به نمونه ها توجه کنید.

    
در نظر داشته باشید که چندین فلش میتواند به آن وارد شود ولی فقط یک فلش از آن خارج میشود.

 علامت تصمیم گیری (دستورالعمل های شرطی)
از شکل لوزی برای عملیات تصمیم گیری و یا جملات شرطی استفاده میشود. توجه داشته باشید که تصمیم گیریها براساس نتایج حاصل از اعمال مقایسه ای و برقرار بودن یا نبودن شرطی اتخاذ می گردد. به نمونه های زیر توجه نمایید.

        دستوراتی که در صورت برقرار نبودن شرط باید انجام شود.      
دستوراتی که در صورت برقراری شرط باید اجرا شوند.

همانگونه که در اشکال فوق ملاحظه میکنید به یک لوزی یک فلش وارد میشود ولی 2 الی 3 فلش، بنا به شرط داخل آن میتواند از آن خارج شود.

نکته:
علامت     نشان دهنده مراحل انجام پذیرفته قبل از شرط می باشد. علامت تصمیم گیری دارای نکاتی مهم است که ذکر آنها در اینجا ضروری است.

              

گاهی برای اینکه عملی انجام شود باید شرط و یا شروطی تحقق یابند؛ یعنی صحت و یا عدم صحت شرطی باعث اجرای عملی شده و یا عملیات را خاتمه می بخشد.
گاهی اجرای مرحله ای به دفعات تکرار میشود تا زمانی که شرط خاصی تحقق یابد برای این منظور از حلقه ها استفاده میشود. به تصاویر زیر نگاه کنید.

خروج از حلقه       

             خروج از حلقه
 
تبدیل یک الگوریتم به فلوچارت
برای رسم فلوچارت یک الگوریتم با در نظر گرفتن توالی و ترتیب دستورالعملها باید به این صورت عمل کنید:

  1. مراحل شروع و پایان الگوریتم را با استفاده از شکل بیضی نشان دهید.
  2. کلیه دستورات ورودی را با استفاده از شکل متوازی الاضلاع نشان دهید.
  3. کلیه اعمال و دستورات انتساب را با استفاده از شکل مستطیل نشان دهید.
  4. دستورات خروجی را با اشکال مربوط به چاپ نشان دهید.
  5. کلیه دستورات شرطی و مقایسه ای را با لوزی نشان دهید.
  6. مراحل اصلی کار را با استفاده از جهت های هدایت به هم ارتباط دهید

 


نظرات شما عزیزان:

نام :
آدرس ایمیل:
وب سایت/بلاگ :
متن پیام:
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

 

 

 

عکس شما

آپلود عکس دلخواه:





موضوعات
پيوندها


آمار وب سایت:  

بازدید امروز :
بازدید دیروز :
بازدید هفته :
بازدید ماه :
بازدید کل :
تعداد مطالب : 17
تعداد نظرات : 0
تعداد آنلاین : 1



اللّهُمَّ كُنْ لِوَلِيِّكَ الْحُجَّةِ بْنِ الْحَسَنِ صَلَواتُكَ عَلَيْهِ وَعَلى آبائِهِ في هذِهِ السّاعَةِ وَفي كُلِّ ساعَةٍ وَلِيّاً وَحافِظاً وَقائِدا ‏وَناصِراً وَدَليلاً وَعَيْناً حَتّى تُسْكِنَهُ أَرْضَك َطَوْعاً وَتُمَتِّعَهُ فيها طَويلاً

خدمات وبلاگ نویسان جوان